﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace FindClone
{
    public static class DirectoryListing
    {
        public static IEnumerable<LocalFile> GetAllFiles(string directoryPath, string searchPattern)
        {
            var files = new List<LocalFile>();

            try
            {
                // Получить файлы в текущей папке
                files.AddRange(Directory.GetFiles(directoryPath, searchPattern, SearchOption.TopDirectoryOnly)
                    .Select(f => new FileInfo(f))
                    .Select(fi => new LocalFile
                    {
                        Path = fi.FullName,
                        Size = fi.Length,
                        CreationTime = fi.CreationTime,
                        LastAccessTime = fi.LastAccessTime
                    }));

                // Получить рекусривно файлы во вложенных папках
                files.AddRange(Directory.GetDirectories(directoryPath)
                    .SelectMany(dir => GetAllFiles(dir, searchPattern)));
            }
            catch (PathTooLongException)
            {
                //Сюда попадают отказы из-за длинного пути
            }
            catch (UnauthorizedAccessException)
            {
                //Сюда попадают отказы в доступе
            }

            return files;
        }

        /// <summary>
        /// Удалить файл
        /// </summary>
        /// <param name="filePath">Путь к удаляемому файлу</param>
        /// <param name="toRecycle">Удалять в корзину?</param>
        public static void DeleteFile(string filePath, bool toRecycle)
        {
            if (!File.Exists(filePath)) return;

            if (toRecycle)
                Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(filePath,
                                                                   Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs,
                                                                   Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin);
            else
                File.Delete(filePath);
        }
    }
}
